/* 
	Essno is an elliptic curve cryptography base software
	Popov AS, 2009
*/ 
 
#ifndef ESSNO_H 
#define ESSNO_H 

/*Выделение памяти для входных переменных*/
#define MAX_BUF_IN 200

/*Функции генерации и проверки подписи*/
//Вход: a_H - бинарное представление хэша
//Выход: ksi - подпись
int encrypt_elliptic( 	BigNumber *p, BigNumber *a, BigNumber *b, BigNumber *m, BigNumber *q, 		\
						BigNumber *xP, BigNumber *yP,  BigNumber *d, \
						BigNumber *a_H, BigNumber *ksi );


//Вход: ksi - подпись, a_H - бинарное представление хэша
//Выход: Да/Нет, ( 1/0 )
int decrypt_elliptic( 	BigNumber *p, BigNumber *a, BigNumber *b, BigNumber *m, BigNumber *q, 		\
						BigNumber *xP, BigNumber *yP, BigNumber *xQ, BigNumber *yQ,\
						BigNumber *a_H, BigNumber *ksi  );


/*Алгоритм "Сдвиговый регистр с линейной обратной связью"*/
int LFSR ( );
/*Генератор случайный чисел на основе LFSR*/
void ess_random(u_int * pRand, u_int length_b);




/*Глобальные переменные*/
/*Ф-ция их инициализации и удаления*/
void initGlobal( void );
void clearGlobal( void );
BigNumber ONE_BN_;		//БЧ - Единица
  BigNumber *ONE_BN;
BigNumber NULL_BN_;		//БЧ - нуль
  BigNumber *NULL_BN;
/*Переменные ф-ции умножения БЧ: mulBN_BN_dec*/
BigNumber B_2_;
  BigNumber *B_2;
BigNumber B_3_;
  BigNumber *B_3;
BigNumber B_4_;
  BigNumber *B_4;
BigNumber B_5_;
  BigNumber *B_5;
BigNumber B_6_;
  BigNumber *B_6;
BigNumber B_7_;
  BigNumber *B_7;
BigNumber B_8_;
  BigNumber *B_8;
BigNumber B_9_;
  BigNumber *B_9;
/*Переменные ф-ции сложения точек: sumDot_Dot*/
BigNumber LL_;
  BigNumber *LL;
BigNumber Ab_;
  BigNumber *Ab;
BigNumber Bl_;
  BigNumber *Bl;
BigNumber XX_;
  BigNumber *XX;
BigNumber YY_;
  BigNumber *YY;
BigNumber DD_;
  BigNumber *DD;
/*Переменные ф-ции Расширенного алгоритма Евклида: euclidBN_BN_dec*/
BigNumber ecA_;
  BigNumber *ecA;
BigNumber ecB_;
  BigNumber *ecB;
BigNumber eT1_;
  BigNumber *eT1;
BigNumber eT2_;
  BigNumber *eT2;
BigNumber eQ_;
  BigNumber *eQ;
BigNumber eR_;
  BigNumber *eR;
BigNumber eX1_;
  BigNumber *eX1;
BigNumber eX2_;
  BigNumber *eX2;
BigNumber eY1_;
  BigNumber *eY1;
BigNumber eY2_;
  BigNumber *eY2;
/*Переменные ф-ции числа вхождений B в A: divBN_BN_dec*/
BigNumber enTT_;
  BigNumber *enTT;
/*Переменная ф-ции вычитания ускоренного (копия делителя*10^x)*/
u_char *tmas_d;

  
/*Маркер запуска ПО с тестированием*/
int testt;


#endif 
